#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#include "wifi.h"
#include "mycamera.h"
#include "server.h"
#include "button_photo.h"
#include "ai_image.h"  // 新增头文件
#include "i2s_audio.h" // 添加I2S音频头文件

static const char *TAG = "MAIN";

// 应用主函数
void app_main(void) {
    ESP_LOGI(TAG, "启动ESP32 AI摄像头应用");
    
    // 1. 初始化WiFi和联网功能
    ESP_LOGI(TAG, "初始化WiFi...");
    wifi_init();
    
    // 2. 初始化摄像头
    if (init_camera() != ESP_OK) {
        ESP_LOGE(TAG, "摄像头初始化失败，程序终止");
        return;
    }
    
    // 3. 初始化AI图像处理功能
    ESP_LOGI(TAG, "初始化AI图像处理功能...");
    ai_image_init();
    
    // 4. 初始化I2S音频接口
    ESP_LOGI(TAG, "初始化I2S音频接口...");
    if (i2s_audio_init() != ESP_OK) {
        ESP_LOGE(TAG, "I2S音频接口初始化失败");
    }
    
    // 5. 初始化按键功能
    ESP_LOGI(TAG, "初始化按键功能...");
    button_init();
    
    // 5. 等待WiFi连接成功
    ESP_LOGI(TAG, "等待WiFi连接...");
    EventBits_t bits = xEventGroupWaitBits(wifi_event_group, 
        WIFI_CONNECTED_BIT,
        pdFALSE,
        pdTRUE,
        portMAX_DELAY);
    
    if (bits & WIFI_CONNECTED_BIT) {
        ESP_LOGI(TAG, "WiFi已连接，停止配置服务器");
        stop_config_server();  // 停止配置服务器
        
        // 6. 启动HTTP服务器
        start_http_server();
        
        ESP_LOGI(TAG, "ESP32-S3-CAM应用程序已启动");
        ESP_LOGI(TAG, "请在浏览器中访问ESP32的IP地址查看图像和与AI对话");
        ESP_LOGI(TAG, "按下GPIO%d按键可以拍照并发送到AI分析", BUTTON_GPIO);
    } else {
        ESP_LOGE(TAG, "WiFi连接失败");
    }
    
    // 主循环，保持程序运行
    while (1) {
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}